home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / util / boot / PeekQual.lha / PeekQual / PeekQual.s < prev    next >
Text File  |  1994-08-27  |  2KB  |  119 lines

  1.     opt    AMIGA
  2.  
  3.     include    exec/execbase.i
  4.     include    devices/input_lib.i
  5.     include    devices/inputevent.i
  6.  
  7.     moveq    #RETURN_FAIL,d7
  8.     move.l    4.w,a6
  9.     lea    DOS.Name(pc),a1
  10.     move.l    #37,d0
  11.     jsr    _LVOOpenLibrary(a6)
  12.     move.l    d0,d6
  13.     beq    exit
  14.     jsr    _LVOCreateMsgPort(a6)
  15.     move.l    d0,d5
  16.     beq    closedos
  17.     move.l    d5,a0
  18.     move.l    #IOSTD_SIZE,d0
  19.     jsr    _LVOCreateIORequest(a6)
  20.     move.l    d0,d4
  21.     beq    delport
  22.     move.l    d4,a1
  23.     lea    Input.Name(pc),a0
  24.     moveq    #0,d0
  25.     move.l    d0,d1
  26.     jsr    _LVOOpenDevice(a6)
  27.     tst.b    d0
  28.     bne    delio
  29.     moveq    #RETURN_ERROR,d7
  30.     move.l    d6,a6
  31.     move.l    #Args.Template,d1
  32.     sub.l    #8,sp
  33.     move.l    sp,d2
  34.     moveq    #0,d3
  35.     jsr    _LVOReadArgs(a6)
  36.     move.l    d0,d3
  37.     movea.l    (sp)+,a4    ; ONQUAL
  38.     movea.l    (sp)+,a5    ; OFFQUAL
  39.     beq.s    closeinput
  40.  
  41.     move.l    d4,a1
  42.     move.l    IO_DEVICE(a1),a6
  43.     jsr    _LVOPeekQualifier(a6)
  44.     moveq    #0,d7
  45.  
  46.     moveq    #0,d2
  47.     move.l    a4,d1
  48.     beq.s    onend
  49.  
  50.     moveq    #0,d1
  51. onloop    lea    Qual.Table(pc),a0
  52.     move.b    (a4)+,d1
  53.     beq.s    onend
  54. searchon
  55.     cmp.b    (a0)+,d1
  56.     beq.s    teston
  57.     cmp.b    #-1,(a0)+
  58.     beq.s    onloop
  59.     bra.s    searchon
  60. teston    move.b    (a0),d2
  61.     btst    d2,d0
  62.     bne.s    onloop    ; bit=1 => qualifier on, ok
  63.     bra.s    end
  64.  
  65. onend    move.l    a5,d1
  66.     beq.s    offend
  67.  
  68.     moveq    #0,d1
  69. offloop    lea    Qual.Table(pc),a0
  70.     move.b    (a5)+,d1
  71.     beq.s    offend
  72. searchoff
  73.     cmp.b    (a0)+,d1
  74.     beq.s    testoff
  75.     cmp.b    #-1,(a0)+
  76.     beq.s    offloop
  77.     bra.s    searchoff
  78. testoff    move.b    (a0),d2
  79.     btst    d2,d0
  80.     beq.s    offloop    ; bit=0 => qualifier off, ok
  81.     bra.s    end
  82.  
  83. offend    moveq    #5,d7
  84.  
  85. end    move.l    d3,d1
  86.     move.l    d6,a6
  87.     jsr    _LVOFreeArgs(a6)
  88. closeinput
  89.     move.l    d4,a1
  90.     move.l    4.w,a6
  91.     jsr    _LVOCloseDevice(a6)
  92. delio    move.l    d4,a0
  93.     jsr    _LVODeleteIORequest(a6)
  94. delport    move.l    d5,a0
  95.     jsr    _LVODeleteMsgPort(a6)
  96. closedos
  97.     move.l    d6,a1
  98.     jsr    _LVOCloseLibrary(a6)
  99. exit    move.l    d7,d0
  100.     rts
  101.  
  102. Qual.Table
  103.     dc.b    's',IEQUALIFIERB_LSHIFT
  104.     dc.b    'S',IEQUALIFIERB_RSHIFT
  105.     dc.b    'c',IEQUALIFIERB_CONTROL
  106.     dc.b    'C',IEQUALIFIERB_CAPSLOCK
  107.     dc.b    'a',IEQUALIFIERB_LALT
  108.     dc.b    'A',IEQUALIFIERB_RALT
  109.     dc.b    'g',IEQUALIFIERB_LCOMMAND
  110.     dc.b    'G',IEQUALIFIERB_RCOMMAND
  111.     dc.b    'b',IEQUALIFIERB_LEFTBUTTON
  112.     dc.b    'B',IEQUALIFIERB_RBUTTON
  113.     dc.b    'm',IEQUALIFIERB_MIDBUTTON
  114.     dc.b    0,-1
  115.  
  116. DOS.Name    dc.b    'dos.library',0
  117. Input.Name    dc.b    'input.device',0
  118. Args.Template    dc.b    'ONQUAL,OFFQUAL',0
  119.